﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
using namespace std;

//class Solution_15
//{
//public:
//	vector<int> findSubstring(string s, vector<string>& words)
//	{
//		
//
//		vector<int> ret;
//		unordered_map<string, int> hash1; // 保存 words ??所有单词的频次
//		unordered_map<string, int> hash2;
//		for (auto& s : words) hash1[s]++;
//		int len = words[0].size(), m = words.size();
//		int right = 0, left = 0, t = 0;
//
//		while (right < s.size() - len + 1)
//		{
//
//			string w = s.substr(right, len);
//			if (hash1[w] > hash2[w])
//			{
//				hash2[w]++;
//				t++;
//				right += len;
//				if (t == m) {
//					ret.push_back(left);
//					left++;
//					right = left;
//					t = 0;
//					hash2.clear();
//				}
//			}
//			else
//			{
//				left++;
//				right = left;
//				t = 0;
//				hash2.clear();
//			}
//
//		}
//		return ret;
//	}
//};
//
//class Solution
//{
//public:
//	vector<int> findSubstring(string s, vector<string>& words)
//	{
//		vector<int> ret;
//		unordered_map<string, int> hash1; // 保存 words ??所有单词的频次
//		for (auto& s : words) hash1[s]++;
//		int len = words[0].size(), m = words.size();
//		for (int i = 0; i < len; i++) // 执? len 次
//		{
//			unordered_map<string, int> hash2; // 维护窗?内单词的频次
//			for (int left = i, right = i, count = 0; right + len <= s.size();
//				right += len)
//			{
//				// 进窗? + 维护 count
//				string in = s.substr(right, len);
//				hash2[in]++;
//				if (hash1.count(in) && hash2[in] <= hash1[in]) count++;
//				// 判断
//				if (right - left + 1 > len * m)
//				{
//					// 出窗? + 维护 count
//					string out = s.substr(left, len);
//					if (hash1.count(out) && hash2[out] <= hash1[out]) count--;
//					hash2[out]--;
//					left += len;
//				}
//				// 更新结果
//				if (count == m) ret.push_back(left);
//			}
//		}
//		return ret;
//	}
//};

//#include<stdio.h>
//#include<Windows.h>
//int main()
//{
//	system("color 0c");      //这里的运用到了system函数； 0 代表背景版为黑色 c为字体红色；
//	printf("I LOVE YOU\n");  //这里可以打印出你想打印的内容；
//	float x, y, a;     //定义变量
//	for (y = 1.5f; y > -1; y -= 0.1f)   //这里可以把y看作y轴，可理解为y从1.5--1；
//	{
//		for (x = -1.5f; x < 1.5f; x += 0.05)   //这里可以看作x轴，意为从x轴从-1.5-1.5；
//		{
//			a = x * x + y * y - 1;
//			putchar(a * a * a - x * x * y * y * y < 0.0f ? '*' : ' ');//这里是一个爱心公式：(x*x+y*y-1)^3-x^2*y^3;
//
//		}
//
//		Sleep(150); //这里是让它打印的速度延缓；
//		printf("\n");   //打印完记得换行；
//	}
//	return 0;
//}

////有几个问题
//1.初始值设置不正确，string ret = { 1 }; 这段代码有问题。{ 1 } 会初始化为字符值 1 的 ASCII 值（控制字符）。您应该初始化为字符串 "1"。
//2.循环条件错误  copy[i + 1] 可能会越界，当 i == copy.size() - 1 时，copy[i + 1] 会访问未定义的内存。
//class Solution {
//public:
//    string countAndSay(int n) {
//        if (n <= 0) {
//            return "";
//        }
//
//        string ret = "1";  // 初始化第一个元素
//        while (--n) {      // 生成第 n 个元素
//            string copy = ret;
//            ret.clear();
//            for (int i = 0; i < copy.size(); ++i) {
//                int j = 1;
//                // 统计连续相同字符的个数
//                while (i + 1 < copy.size() && copy[i + 1] == copy[i]) {
//                    ++i;
//                    ++j;
//                }
//                // 拼接 "个数 + 字符" 到结果字符串
//                ret += to_string(j);
//                ret += copy[i];
//            }
//        }
//        return ret;
//    }
//};

//考虑不周到，欠考虑，做题前得先把所有出现的可能都考虑到
//1419.数⻘蛙（模拟）
//class Solution {
//public:
//    int minNumberOfFrogs(string croakOfFrogs) {
//        string s = "croak";
//        int n = croakOfFrogs.size();
//        int sz = s.size();
//        int j = 0;
//        int ret = 0;
//        for (int i = 0; i < n;)
//        {
//            j = 0;
//            while (i < n && croakOfFrogs[i++] == s[j])
//            {
//                if (j == 4)
//                {
//                    ret = 1;
//                    break;
//                }
//                j++;
//            }
//        }
//
//        unordered_map<char, int> count(6);
//        for (auto& s : croakOfFrogs)
//        {
//            if (s == 'c')
//                count[0]++;
//            else if (s == 'r')
//                count[1]++;
//            else if (s == 'o')
//                count[2]++;
//            else if (s == 'a')
//                count[3]++;
//            else if (s == 'k')
//                count[4]++;
//            else
//                count[5]++;
//        }
//        int i = 0;
//        while (count[i] == count[i + 1])
//        {
//            if (i == 3)
//                return count[i] - ret;
//            i++;
//        }
//        return -1;
//    }
//};
//
//class Solution
//{
//public:
//    int minNumberOfFrogs(string croakOfFrogs)
//    {
//        string t = "croak";
//        int n = t.size();
//        vector<int> hash(n); // ⽤数组来模拟哈希表 
//        unordered_map<char, int> index; //[x, x这个字符对应的下标] 
//        for (int i = 0; i < n; i++)
//            index[t[i]] = i;
//
//        for (auto ch : croakOfFrogs)
//        {
//            if (ch == 'c')
//            {
//                if (hash[n - 1] != 0) hash[n - 1]--;
//                hash[0]++;
//            }
//            else
//            {
//                int i = index[ch];
//                if (hash[i - 1] == 0) return -1;
//                hash[i - 1]--; hash[i]++;
//            }
//        }
//        for (int i = 0; i < n - 1; i++)
//            if (hash[i] != 0)
//                return -1;
//        return hash[n - 1];
//    }
//};


int main()
{/*
    Solution s;
    string c = s.countAndSay(4);
    for (int i = 0; i < c.size(); i++)
    {
        printf("%c", c[i]);
    }*/
    return 0;
}

